我们渴望和平,但世界常有战争。2022年年初爆发的俄乌战争就近在眼前。对于战争未来可能的走势,有学者给出了数学模型的视角来进行分析,其中著名的模型就包括“兰彻斯特战斗模型”(Lanchester Models).
兰彻斯特模型是一组模型,根据是正规战还是游击战,是否有补给等分为不同形式。
在一般战争模型的框架下,根据不同的战斗类型,讨论具体的模型情况
增加的假设如下:
补充的符号如下:
双方都使用游击部队作战。 甲方士兵在乙方士兵看不到的某个面积的隐蔽区域内活动,乙方士兵不是向甲方士兵开火,而是向这个隐蔽区域射 击,并且不知道杀伤情况。这时甲方战斗减员率不仅与乙方兵力有关,而且随着甲方兵力的增加而增加。因为在一个有限区域内,士兵越多,被杀伤的就越多。
一方为游击部队(甲方),另一方为正规部队(乙方).
根据上述正规战和游击战模型,在同样的符号和假设下,建立模型如下:
在这里我们考虑双方都是正规战的模型,取甲乙双方初始人数分别为15和5,乙对甲的单位时间射杀数为0.002,甲对乙的单位时间射杀数为0.001,双方的非战斗减员率都相同为0.0001.甲方增援速率为0.1,乙为0.05.基于这些条件,绘制接下来40天双方病例图像如下:
Lanchester提出的模型非常简单,只考虑双方兵力的多少和战斗力的强弱,兵力因战斗减员和非战斗减员而减少,又由后备力量的增援而增加;战斗力即杀伤对方的能力,则与射击率(单位时间的射击次数)、射击命中率以及战争的类型(正规战、游击战)等有关。这些模型没有考虑交战双方的政治、经济、社会等因素。而仅靠战场上兵力的优劣是很难估计战争胜负的,使用这些模型判断整个战争的解决是不大可能的,但是对于局部战役来说还有参考价值。更重要的是,建模的思路和方法为我们借助数学模型讨论社会科学领域中的实际问题提供了可以借鉴的示例。
参考文献
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
%matplotlib inline
import pandas as pd
x0 = 15
y0 = 5
a = 0.002
b = 0.001
alpha = 0.0001
beta = 0.0001
u = 0.1
v = 0.05
def lanchester(X,t):
x,y = X
dxdt = -a*y - alpha*x+u
dydt = -b*x - beta*y +v
return [dxdt,dydt]
X1 = odeint(lanchester,t=range(40),y0=[x0,y0])
df = pd.DataFrame(X1,columns=['x','y'])
plt.style.use('seaborn')
df.plot.line()
plt.savefig('images/lanchester.png')